import numpy as np

B = [[4, 2], [1, 5]]
A = np.array(B)
eig_val, eig_vex = np.linalg.eig(A)  # eig()函数求解特征值和特征向量
print("\n")
print("A的特征值为：\n", eig_val)
print("A的特征向量为：\n", eig_vex)

# 计算特征值的对角矩阵
# 一维数组：np.diag(eig_val) 会将 eig_val 转换为一个对角矩阵，其中对角线上的元素是 eig_val 的元素。
# 二维数组：np.diag(matrix) 会返回 matrix 的对角线元素组成的一维数组。
sigma = np.diag(eig_val)  # 特征值的对角化
print("对A的特征值金进行对角化：\n", sigma)

# 检查 A 乘以特征向量矩阵是否等于特征向量矩阵乘以对角矩阵
# np.allclose 用于比较两个数组是否在数值上接近
print("A×eig_vex与eig_vex×sigma是否相等：",
      np.allclose(A.dot(eig_vex), eig_vex.dot(sigma)))

# 检查 A 乘以特征向量矩阵是否等于对角矩阵乘以特征向量矩阵
print("A×eig_vex与sigma×eig_vex是否相等：",
      np.allclose(A.dot(eig_vex), sigma.dot(eig_vex)))
